{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "%reload_ext autoreload\n",
    "%autoreload 2\n",
    "%matplotlib inline\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "sns.set(context=\"notebook\", style=\"white\")\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import scipy.io as sio\n",
    "\n",
    "import sys\n",
    "sys.path.append('..')\n",
    "\n",
    "from helper import general\n",
    "from helper import pca"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(50, 2)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<seaborn.axisgrid.FacetGrid at 0x11264a748>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nRRfKz2P6jOAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x112647dd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mat = sio.loadmat('./data/ex7data1.mat')\n",
    "X = mat.get('X')\n",
    "\n",
    "# visualize raw data\n",
    "print(X.shape)\n",
    "\n",
    "sns.lmplot('X1', 'X2', \n",
    "           data=pd.DataFrame(X, columns=['X1', 'X2']),\n",
    "           fit_reg=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# normalize data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<seaborn.axisgrid.FacetGrid at 0x106c79668>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\njjt0xRVXdPj7GAtfTFOfziOPPKJly5bptttuk/T5mcjombfeekvNzc2qqKho3y0qGo0qKSlJlZWV\nTPn3QWeMaT6GAAACWklEQVTryuhaUVGRHnzwQc2aNUsZGRm65557ejQliM7x/8Peq6ysVFtbm9au\nXdveHHz872NNTc1p3895xgAAGPP9NDUAAG5HGAMAYIwwBgDAGGEMAIAxwhgAAGOEMQAAxghjAACM\nEcYAABgjjAEAMEYYAwH0j3/8Q6NGjVJRUdEpr+3du1eXXXaZysvLO1x/5ZVXNHHixESVCAQKYQwE\n0Pnnn68lS5aooqJC27Zta7/e1NSkefPm6brrrtN3v/vd9uvbt2/XkiVL2LsYiBPCGAiob33rW7rh\nhhu0dOlShUIhSWofKRcXF0s6Fs4LFy7UvHnzdMEFF5jVCvgdYQwEWHFxsdLT07Vo0SJt2bJFv/3t\nb7V69WoNHDhQklRfX69QKKQtW7aooKDAuFrAvzi1CQi43//+97r11lvVr18/LViwoMtzgUtLS7V1\n61ZVVlYmuELA/xgZAwE3YsQIZWVlqa2tTWPGjLEuBwgkwhgIuOLiYv3nP//RxRdfrMLCQoXDYeuS\ngMAhjIEAe+WVV7R161aVlJRo+fLlOnDggJYvX25dFhA4hDEQUAcOHNADDzygadOmacKECcrNzdU9\n99yj5557Tm+++aZ1eUCgEMZAAEUiEc2bN085OTlauHBh+/XZs2frqquuUlFRkT7++GPDCoFgIYyB\nAFqxYoXq6ur02GOPKTU1tf16UlKSli9frkgk0iGkAcQXjzYBAGCMkTEAAMYIYwAAjBHGAAAYI4wB\nADBGGAMAYIwwBgDAGGEMAIAxwhgAAGOEMQAAxghjAACMEcYAABgjjAEAMPb/3BwzMmEvjSEAAAAA\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x106c795c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X_norm = pca.normalize(X)\n",
    "\n",
    "sns.lmplot('X1', 'X2', \n",
    "           data=pd.DataFrame(X_norm, columns=['X1', 'X2']),\n",
    "           fit_reg=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# covariance matrix $\\Sigma$\n",
    "<img style=\"float: left;\" src=\"../img/cov_mat.png\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "this is biased sample covariance matrix, for unbiased version, you need to divide it by $m-1$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.        ,  0.73553038],\n",
       "       [ 0.73553038,  1.        ]])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Sigma = pca.covariance_matrix(X_norm)  # capital greek Sigma\n",
    "Sigma  # (n, n)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# PCA\n",
    "http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.svd.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "U, S, V = pca.pca(X_norm)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.70710678, -0.70710678],\n",
       "       [-0.70710678,  0.70710678]])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "U"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.70710678, -0.70710678])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "u1 = U[0]\n",
    "u1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# project data to lower dimension"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.49631261],\n",
       "       [-0.92218067],\n",
       "       [ 1.22439232],\n",
       "       [ 1.64386173],\n",
       "       [ 1.2732206 ],\n",
       "       [-0.97681976],\n",
       "       [ 1.26881187],\n",
       "       [-2.34148278],\n",
       "       [-0.02999141],\n",
       "       [-0.78171789]])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# show top 10 projected data\n",
    "Z = pca.project_data(X_norm, U, 1)\n",
    "Z[:10]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "http://stackoverflow.com/a/23973562/3943702"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x1163d08d0>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n//xnbdq0qcb3A3AmDHEHqnD8+HFJUvv27avd7sYbb9RXX32lwsJCeXl5SZJ69Oihp59+2rxN+SvL\nkrR06VL179/fHFT79OkjNzc3vf7669We69y5c0pJSVFAQIAkqWnTpnryySf1z3/+UwMHDtSRI0cU\nERGhhIQE8z5lFxD27NlT41x5SSosLNT69es1cuRIPfPMM+b6Tp48qZ07d1a7b0lJiVasWKHmzZtL\nujKEb+fOnfryyy/N7+O+ffu0bds28z6LFy9W3759tXDhQnPbTTfdpKefflrffvut+vbtK+nKl5r5\n8+erV69ekqSbb75Z/fr107fffqtbbrlFqamp6tChg5544glJV74sN2vWrELPf5l169bpzJkz2rhx\no9q2bStJuvfee3XmzBktXLhQQ4YMMW/bqVMnLViwwPz4wIED+uyzz2p8LwHUP5PJpMmTJ1v0vtnK\nkSNHNGnSJHl6elq05+bm6r///a++/PJLi8DVtGlTm9cA5zZ79mxlZmbqtdde080331zttt9++60O\nHTqkN998U3369JEk3X333RYLxFXl9ttvN89N79GjhzZs2KBLly4pMTFRrq6u6t27t7Zv3669e/fq\nD3/4g3766Sdt2rRJU6ZM0ciRIyVd+f7g4uKi1atX6/HHH1fLli0lSZcuXdK6devUrFkzSVe+m8TH\nxys9PV2dO3dWamqqevfurcGDB5vP36xZM7Vu3dpcX/le78WLF+uWW27RmjVrzMG9T58+GjhwoJYu\nXWrx3eixxx4zfzfp1auXvvjiC3399deKiYmp8T0BnAU96EAVyj48rruu+utYZc+X/7Dp1KlTldv/\n/PPPOnHihLlnvcyQIUNqHKbVunVrcziXZJ4Dfv78eUnS0KFDtWrVKplMJh05ckSff/65li5dqkuX\nLlW6QE1l9u/fr5KSEt13330W7WUftNW59dZbzeFcknx8fNS6dWuLixze3t7mHv9jx47p5MmT6tev\nn0pKSsz/wsLC1Lx5c+3atcvi+KGhoeafy0J12Wvv1auXjh07pmHDhmn58uX64YcfNGTIEHNgv1pq\naqq6du1qPk6Zhx9+WPn5+RYr9Hfp0sVim7Zt29IzBhhQVlaWYmJilJ2dbfNjJycnKzY2Vj4+PhWe\nO3bsmHx9fdW+fXu1adPG/A8ob8OGDdq6daueeOIJqz5Tv//+e3l4eJjDuXTlok/ZhevqdO3a1fyz\nq6urWrVqpeDgYLm6/u+rv7e3t3799VdJV3qxpSsL1Jb/PO7Xr58uXryotLQ083533HGHOZxLlX8e\nb9y4UaNHj9Zf//pXZWdn65lnnqm07gsXLuiHH37Qgw8+aNGr7uXlpX79+mnPnj0W2/N5jMaAHnSg\nCmWhsqwnvSr/+c9/1KxZM7Vo0cLcVv6D62plc5ev/vJW2Ze+q109FK7sg7Ys2BcVFWnu3Lnatm2b\nSkpKFBAQoK5du8rd3d3qOVplPc5XL1BnzWry5cN5VTWXd+bMGUnSSy+9VGEVWhcXF+Xl5Vm0le+1\nKvsgL5sWUDY64L333tPKlSu1bNkytW/fXlOmTKn0i9DZs2fVoUOHCu1lv4eyiwiVvQZXV1fmvAEG\ntGfPHoWHh2vSpEkVvsinpaXplVdeUWZmpm666SaNHz9eDzzwgNXH3rlzpxISElRYWFhhXY/MzMwa\ne0PRuB0+fFgLFixQaGio4uLirNrn7Nmz5l7r8qz5PL7++usrtFX3eXz27FmVlpbqN7/5TYXnXFxc\ndOrUqSqPc/V3kenTp+uGG27Qtm3b9PLLL2vevHkKDQ3VnDlzzGvXlH2G//rrryotLa30Nfn4+Jgv\nIJTtc/WoFBcXlwpz8gFnR0AHqtC6dWuFhobq888/16RJkyrd5ty5c/rHP/5R6XzEqpRdaf7ll18s\n2q9+fC1efvllffHFF1q6dKnCw8PNH6K9e/e2+hitWrVSaWmp8vPzLb5wloVpWyq7qDF16tRKbzNT\n/qKHNR566CE99NBD5t/L2rVrzfPVrv7wb9mypfLz8ysco+xLSPmheACcQ2xsbKXteXl5Gjt2rCZP\nnqx77rlH+/btU3x8vNq0aaPu3btbdeyyUF5+Hm2ZrKwsXbhwQb///e/1008/qXPnzpo2bRqhHZKu\nXPCdOHGirr/+er3xxhs1jswr06pVK50+fVqlpaUWvcv2+Dz28vKSi4uL3nnnnUo7GW644Qarj+Xu\n7q4xY8ZozJgxOnnypL766iutWLFCL7zwgj766CNJ/wvzLVq0qPSCvHTl/1sj380GsBeGuAPVGD9+\nvH766SctXry4wnOXL1/W7NmzVVRUpD/84Q9WH7Nt27a68cYb9cUXX1i0f/bZZ9d0f/Ly9u7dq169\neqlfv37mcP7DDz+ooKDA6h7frl27qkmTJtq+fbtF+9Wrm9vCrbfeqjZt2ug///mP7rzzTvM/X19f\nJSYmKj093epjPffcc5owYYKkKz35gwYN0jPPPKOSkhKLK/9levTooX379iknJ8eifdu2bfLx8dGN\nN95YtxcHwDDee+899e7dW48//rg6dOighx9+WDExMXr77bclXZlD/vPPP1f4d/LkSauOf+zYMf36\n668aN26cVq5cqSZNmujpp582D/lF4zZ16lSdOHFCCQkJtbo96d13362SkhJ9+eWX5rbi4mL94x//\nsHmNPXv2lHRllF/5z+P8/HwtWbLE6osCRUVFGjRokN566y1JV77zPP744/rNb35jMSKx7PtO06ZN\nFRwcrO3bt1t8TyksLNTXX3+tsLAwW71EwGnQgw5UIyIiQlOnTtWiRYuUnp6uRx55RH5+fsrOzlZy\ncrIyMjK0YMGCauecV2bixIl64YUXNGfOHA0cOFDp6elasWKFJNUppIeEhGj79u1KTk7WbbfdpvT0\ndK1atUqurq4WXxSrC+vNmjXTs88+qzfeeENNmzbV3XffrW+++UbffPPNNddVFVdXV02aNElz5syR\ni4uL7r//fp09e1YrV65Ubm6u7rzzTquPdffdd2vOnDlauHCh+vbtq7NnzyopKUk333xzpfegHTFi\nhLZt26ann35a48aNk7e3t1JSUrRnzx698sortnyZABwsKytLX331lcW83JKSEt1yyy2SpClTpljM\nsS0TGBhYaY/51d58801dunTJPPw2MTFRffv21ddff13pkGE0HuvXr9dXX32lwYMHy8vLSwcOHKiw\nTfPmzSu9l3l4eLj69OmjGTNmKD8/X+3atdP69etVUFBg8zUO7rjjDkVGRmrmzJnKzs5WcHCwjh07\npiVLlqhDhw7m/1eqUva9wtPTU8HBwVq+fLnc3d3VqVMnHTt2TCkpKXrwwQcrbC9JkydP1h//+EeN\nGjVKTzzxhEwmk9asWaPi4mKLO7owtQyNBQEdqMHTTz+tbt266e2339aiRYtUUFAgX19f9e7dW/Pn\nz6/woVrZ7ceuNmTIEF24cEF//vOftXnzZt1+++2aMWOGpk2bVum8sfLHrq4tLi5Oly5d0htvvCGT\nyaSAgAA9++yz+te//qWvv/7a/OFWU32jR4/W9ddfr7ffflvvvPOOunbtqri4uErnidemvsraoqOj\n5eXlZb5VSrNmzdS9e3ctXrzYYnG5qo5T1v7YY4/p0qVLSk5OVnJysjw9PdWnTx9NmTJFbm5uFbb3\n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\nADidLl26mBeEK7Nv3z517dpVbm5uCg4OVkZGhvm5goICnT59Wu3bt6/vUgEAcCgCOgAAsLn8/HwV\nFRVJkgYNGqTCwkItWLBAWVlZevnll3X+/Hk9+OCDkqQRI0Zo/fr12r59u7KysjRt2jR17txZISEh\njnwJAADUOwI6AACoMxcXF4vHERER+vTTTyVJzZs316pVq5SWlqZHH31Uhw4d0tq1a9WkSRNJVwJ8\nfHy8EhIS9Nvf/laStHz58vp9AQAAGABz0AEAQJ2lp6dbPC4/ZF2S7rrrLm3evLnK/aOjoxUdHW2X\n2gAAcBb0oAMAAAAAYAAEdAAAAAAADICADgAAAACAARDQAQAAAAAwAAI6AAAAAAAGQEAHAAAAAMAA\nCOgAAAAAABgAAR0AAAAAAAMgoAMAAAAAYAAEdAAAAAAADICADgAAAACAARDQAQAAAAAwAAI6AAAA\nAAAGQEAHAAAAAMAACOgAAAAAABgAAR0AAAAAAAMgoAMAAAAAYAAEdAAAAAAADICADgAAAACAARDQ\nAQAAAAAwAAI6AAAAAAAGQEAHAAAAAMAACOgAAAB2duRI1c/l59vmHDUdxxbnufoY5R+X/Vzdearb\n35pzl38fr+V81W1z9Wup7LVZq/z+tamhunps5erXVlM9tt6uLn8DlR23/P5HjtT+fbOmnvK/k7r+\nvRmRUes2al32RkAHAACwo2++kQIDr/z3aseOSf7+V/5bFzUdxxbnufoY5R+X/fzNN1Wfp7r9rT13\n2ft4Leer7rjlj3PsmOTnV/G1Wfveld+/uvoqq7OqemzxN1L+XH5+df9buZbt6vI3UNNrKfv/rDbv\nmzX1lP+dlP+7qOlYzsKodRu1rvpwnaMLAAAAaMiOH7f8b3lnzkiXL1/5b13UdBxbnOfqY1z9+PLl\nK6+xqvPUtL8155aunKNFi9qfr7rjXn2c0tIr/8q/NmvfuzNn/rd/dfVVVWdl9djib6T8ucp+tqYe\na+u2drtr/Ruo6rhlP5f9/1Wb982av8nyfyNX/11UdyxnYdS6jVpXfaAHHQAAAAAAAyCgAwAAAABg\nAAR0AAAAAAAMgIAOAAAAAIABENABAAAAADAAAjoAAAAAAAZAQAcAAAAAwAAMH9ALCgo0ceJEhYWF\nKSIiQomJibpcdtNDAADgcCaTSZGRkUpNTa1ym8OHDysmJkahoaGKjo7Wjz/+WOl2f/vb3xQYGGiv\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x114636160>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 4))\n",
    "\n",
    "sns.regplot('X1', 'X2', \n",
    "           data=pd.DataFrame(X_norm, columns=['X1', 'X2']),\n",
    "           fit_reg=False,\n",
    "           ax=ax1)\n",
    "ax1.set_title('Original dimension')\n",
    "\n",
    "sns.rugplot(Z, ax=ax2)\n",
    "ax2.set_xlabel('Z')\n",
    "ax2.set_title('Z dimension')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# recover data to original dimension\n",
    "Of course, there would be inevitable information loss if you boost data from lower to higher dimension"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x1166f0e80>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n+Ph4Y//+/WaHYzdmzBhj0qRJxokTJ4zMzExj2LBhxuLFi80Oy6iqqjLuvvtu4+mnnza++eYb49NP\nPzWSk5ONDz74wOzQHHzwwQdG9+7djenTp5sdiltcHWvS0tKM119/3SguLrZ/XL582Stt33///cbT\nTz9t5ObmGq+++qrRp08fIz8/v0ltuzKGebLPrrbtqT6vWbPGuOuuu4wvvvjC2LdvnzFo0CBj7dq1\nDdZ3p8/OjsllZWXGHXfcYSxevNjIzc015s2bZ9xxxx1GeXm5y/1ztW3DMIxhw4YZH3zwgUMfrVZr\nk9t2Zqxvjj47+zfG0/119m9Ic/TZbL58/eguX7/+dJcvXb+6w9evfd3lq9fO7nLn2tunE+uKigrj\nqaeeMr799lt72YIFC4xJkyaZGFW1srIyo2fPnsaRI0fsZVlZWUbPnj2NiooKEyOrdvbsWWPcuHHG\n4MGDjf79+5s6MJWVlRm9evUyDhw4YC975ZVXjHHjxpkWU20nTpwwRowYYYwYMcKnBofc3FwjPj7e\n+O677+xlH3zwgXHnnXeaGFW1wsJC48knnzQuXbpkL5s8ebLx/PPPmxiVo++//9742c9+Zjz44IN+\nnVg3Zay58847jT179ni97c8//9xISkpySO4effRR4+WXX3a5bVfHME/12dW2Pdnnu+66y6Gt9957\nz0hNTW2wflP77MqYvHnzZmPo0KEOZcOGDWvy3xRX2q6oqDB69OhhfP31101q62rOjvWe7rOz7Xq6\nv678DfF0n83my9eP7vL16093+dL1qzt8/drXXb567ewud6+9fXoqeEhIiBYvXqyuXbtKkv75z39q\n9+7dGjBggMmRSQEBAVq9erXi4+PtZYZhqLKyUmVlZSZGVi07O1txcXF699131bZtW1NjycnJUWVl\npfr06WMvS05O1pEjR0yM6or9+/crJSVFb775pgzDMDscu6ioKL3++uu6/vrr7WWGYfjEdK+oqCi9\n9NJLatOmjSTp4MGDOnDggE/836yxaNEijRgxQjfddJPZobjF1bGmtLRUBQUFuuGGG7ze9pEjR9Sz\nZ0+Fhobay5KTk3Xo0CGX23ZlDPNkn11t21N9LiwsVH5+vvr27etwnjNnzqi4uLhOfXf67MqYfOTI\nESUnJzuU3XbbbcrKynK5XVfb/r//+z9ZLBZ16dKlSW1dzdmx3tN9drZdT/fXlb8hnu6z2Xz5+tFd\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1163e9fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X_recover = pca.recover_data(Z, U)\n",
    "\n",
    "fig, (ax1, ax2, ax3) = plt.subplots(ncols=3, figsize=(12, 4))\n",
    "\n",
    "sns.rugplot(Z, ax=ax1)\n",
    "ax1.set_title('Z dimension')\n",
    "ax1.set_xlabel('Z')\n",
    "\n",
    "sns.regplot('X1', 'X2', \n",
    "           data=pd.DataFrame(X_recover, columns=['X1', 'X2']),\n",
    "           fit_reg=False,\n",
    "           ax=ax2)\n",
    "ax2.set_title(\"2D projection from Z\")\n",
    "\n",
    "sns.regplot('X1', 'X2', \n",
    "           data=pd.DataFrame(X_norm, columns=['X1', 'X2']),\n",
    "           fit_reg=False,\n",
    "           ax=ax3)\n",
    "ax3.set_title('Original dimension')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### the projection from `(X1, X2)` to `Z` could be visualized like this"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img style=\"float: central;\" src=\"../img/pca_projection.png\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
